/********************************************************************************************
*            Copyright (c) 2013. All Rights Reserved.
*
*
* 文件名称:   port_task.h
* 描    述:  
* 当前版本:   V1.0
* 日    期:   2021/01/12
* 创 建 人:   杨小珛
* 
*********************************************************************************************/
#ifndef PORT_TASK_H
#define PORT_TASK_H

#include "os_app.h"

#define PORT_INPUT_EXT1_PIN   ( 28 ) 
#define PORT_INPUT_EXT2_PIN   ( 29 ) 
#define PORT_INPUT_EXT3_PIN   ( 30 ) 
#define PORT_INPUT_EXT4_PIN   ( 31 ) 
#define PORT_INPUT_EXT5_PIN   ( 33 ) 
#define PORT_INPUT_EXT6_PIN   ( 24 ) 
#define PORT_INPUT_EXT7_PIN   ( 26 ) 
#define PORT_INPUT_EXT8_PIN   ( 135 ) 

/**************************外部引脚输入状态定义结构体***************************/
#define PORT_INPUT_MAX_NUM   8  /* 外部输入的IO口的个数 */

typedef struct
{
    union 
    {
        volatile uint8_t gpio_st;
        struct
        {
            volatile uint8_t bport0     : 1;  /*1 输入高电平 ，0 输入低电平*/
            volatile uint8_t bport1     : 1;  /*1 输入高电平 ，0 输入低电平*/ 
            volatile uint8_t bport2     : 1;  /*1 输入高电平 ，0 输入低电平*/     
            volatile uint8_t bport3     : 1;  /*1 输入高电平 ，0 输入低电平*/
            volatile uint8_t bport4     : 1;  /*1 输入高电平 ，0 输入低电平*/
            volatile uint8_t bport5     : 1;  /*1 输入高电平 ，0 输入低电平*/
            volatile uint8_t bport6     : 1;  /*1 输入高电平 ，0 输入低电平*/
            volatile uint8_t bport7     : 1;  /*1 输入高电平 ，0 输入低电平*/
        };
    };
    volatile uint8_t keystroke[PORT_INPUT_MAX_NUM];/*输入消除抖动*/
}gpio_input_state_t;

/*********************获取外部引脚输入状态 枚举类型****************************/
typedef enum
{
    GET_INPUT_EXT1 = 0x00,
    GET_INPUT_EXT2,
    GET_INPUT_EXT3,
    GET_INPUT_EXT4,
    GET_INPUT_EXT5,
    GET_INPUT_EXT6,
    GET_INPUT_EXT7,
    GET_INPUT_EXT8,
}gpio_input_channel_e;

/**************************外部输入ADC结构体**********************************/

typedef struct
{
    volatile uint32_t adc0;
    volatile uint32_t adc1;
    volatile uint32_t adc2;
}gpio_adc_value_t;

/*********************获取ADC数据 枚举类型****************************/
typedef enum
{
    GET_ADC0 = 0x00,
    GET_ADC1,
    GET_ADC2,
}gpio_adc_channel_e;

/** ****************************************************************************
* @remarks       void port_create_task(unsigned portBASE_TYPE uxPriority)
* @brief         创建外部引脚事件处理任务
* @param[in]     uxPriority 任务的优先级
* @param[out]    无
* @return        无
* @attention     无
*******************************************************************************/
extern void port_create_task(unsigned portBASE_TYPE uxPriority);

/** ****************************************************************************
* @remarks       uint8_t port_ext_gpio_st_get( gpio_input_channel_e )
* @brief         获取外部IO口的状态
* @param[in]     channel 选择的获取IO的通道
* @param[out]    无
* @return        返回输入IO口的状态 0 低电平 1高电平
* @attention     无
*******************************************************************************/
extern uint8_t port_ext_gpio_st_get( gpio_input_channel_e channel );

/** ****************************************************************************
* @remarks       uint32_t port_adc_gpio_value_get( gpio_adc_channel_e channel )
* @brief         获取外部ADC 采集的数据
* @param[in]     channel 选择ADC的通道
* @param[out]    无
* @return        ADC数值
* @attention     无
*******************************************************************************/
extern uint32_t port_adc_gpio_value_get( gpio_adc_channel_e channel );

/** ****************************************************************************
* @remarks       uint8_t port_collect_acc_pin_state_get( void )
* @brief         获取ACC 电源状态
* @param[in]     无
* @param[out]    无
* @return        1 高电平    0低电平
* @attention     无
*******************************************************************************/
extern uint8_t port_collect_acc_pin_state_get( void );

#endif


